package org.jsea.meta.api.service;

import org.jsea.meta.api.bean.MetaApiDefinitionBean;
import org.jsea.meta.api.bean.MetaApiField;

import java.util.List;
import java.util.StringJoiner;

/**
 * --.
 * *
 * author   Jiang.hy
 * create   2022-04-09
 */
public class MetaApiInsertHandler extends AbstractMetaApiHandler {

    public MetaApiInsertHandler(MetaApiDefinitionBean bean) {
        super(bean);
    }

    @Override
    public String sql() {
        return new StringJoiner(" ")
                .add("insert into")
                .add(table())
                .add(columns())
                .add("values")
                .add(marks())
                .toString();
    }

    @Override
    public void init() {
    }

    protected String marks() {
        int size = bean.getColumn().size();
        StringJoiner in = new StringJoiner(", ");
        for (int i = 0; i < size; i++) {
            in.add(qm);
        }
        if (bean.getApplyValues() != null) {
            for (Object value : bean.getApplyValues()) {
                in.add(value.toString());
            }
        }
        return "(" + in + ")";
    }

    protected String columns() {
        StringJoiner columns = new StringJoiner(", ");
        List<MetaApiField> column = bean.getColumn();
        column.forEach(c -> columns.add(c.getName()));
        if (bean.getApply() != null) {
            columns.add(bean.getApply());
        }
        return "(" + columns + ")";
    }
}
